//
// Created by jinling on 2025/6/24.
//

#include "TaskMgr.h"


using namespace  tmms::base;


void TaskMgr::OnWork()
{
    std::lock_guard<std::mutex> lk(lock_);
    int64_t now = TTime::NowMS();
    for ( auto iter  = tasks_.begin() ; iter!=tasks_.end() ; )
    {
        if ((*iter)->When()<now) //如果他比当前时间小了  那说明他就是要执行了
        {
            (*iter)->Run();
            if ((*iter)->When()<now)//判断一下这个函数对象执行之后他的时钟有没有更新,重新重置时间
            {
                    //如果没有更新，直接删了，他直接返回下一个迭代器的位置===所以不能在for中写 ++iter
                iter = tasks_.erase(iter);
                continue;
            }
        }
        ++iter;
    }
}

bool TaskMgr::Add(TaskPtr &task) //RII ,资源获取的时候就初始化
{
    std::lock_guard<std::mutex> lk(lock_);
    auto iter = tasks_.find(task);
    if (iter!=tasks_.end())
    {
        return false;
    }
    tasks_.emplace(task);//插入
    return true;
}

bool TaskMgr::Del(TaskPtr &task)
{
    std::lock_guard<std::mutex> lk(lock_);
    return tasks_.erase(task);
}
